﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Infinity.Types
{
	public interface ISubType<T>
	{
		/// <summary>
		/// Halmaz elemének típusa
		/// </summary>
		Type GetBaseType();

		/// <summary>
		/// Logikai függvény, ami igazzal tér vissza, ha az adott elem benne van a halmazban
		/// </summary>
		bool IsElementOf(T obj);

		/// <summary>
		/// Halmazdeklarálás feltételfüggvénye
		/// </summary>
		Func<T, bool> Condition { get; }

		/// <summary>
		/// Típus értéke
		/// </summary>
		T Value { get; set; }

		/// <summary>
		/// Igazzal tér vissza, ha még nem inicializálták
		/// </summary>
		bool IsUndefined { get; set; }
	}

	public interface ISubType
	{
		/// <summary>
		/// Halmaz elemének típusa
		/// </summary>
		Type BaseType { get; }

		/// <summary>
		/// Logikai függvény, ami igazzal tér vissza, ha az adott elem benne van a halmazban
		/// </summary>
		bool IsElementOf(object obj);

		/// <summary>
		/// Halmazdeklarálás feltételfüggvénye
		/// </summary>
		Func<object, bool> Condition { get; set; }

		/// <summary>
		/// Típus értéke
		/// </summary>
		object Value { get; set; }

		/// <summary>
		/// Igazzal tér vissza, ha még nem inicializálták
		/// </summary>
		bool IsUndefined { get; set; }
	}
}